
import GameRpc from "./GameRpc";

class VillageApi {
    private control: string = 'P200001'

    /**
    * 查询己方村庄详情
    * @param newdid  村庄的zoneId
    * 
    * @return
    * code         | int      | 返回码
    * data         | array    | 包含村庄详情的结果集
    */
    public async query(newdid?) {
        return await GameRpc.fetching({
            func: this.control + '.query',
            params: {
                newdid
            }
        })
    }

    /**
    * 查询第三方村庄信息
  
    * @param d     | int   | 第三方村庄坐标
    * 
    * @returns 
    * code         | int      | 返回码
    * data         | array    | 包含第三方村庄详情的结果集
    */
    public async queryThird(d: number) {
        return await GameRpc.fetching({
            func: this.control + '.queryThird',
            params: {
                d
            }
        })
    }

    /**
     * 建筑的升级或建造
     *
     * @param gid    建筑物类别编号(gid)
     * @param uid    建筑地点编号(uid)
     * @returns 
     */
    public async buildingOper({ gid, uid }) {
        return await GameRpc.fetching({
            func: this.control + '.buildingOper',
            gid: gid,
            uid: uid
        })
    }

    /**
    * 拆除建筑
    * @param abriss
    * abriss   | int   | 指定的拆除地点，注意不是建筑物类别编号(这个不唯一)而是内城建造地点编号。外城资源田不能拆除
    * @returns 
    */
    public async destroyBuilding(abriss) {
        return await GameRpc.fetching({
            func: this.control + '.destroyBuilding',
            abriss
        })
    }
    /**
    * 操作事件: 取消/速建/速拆
    *
    * @param  ac     1 取消 2 速建 3 速拆
    * @param eid    指定事件句柄
    * @returns 
    */
    public async eventOper({ ac, eid }) {
        return await GameRpc.fetching({
            func: this.control + '.eventOper',
            ac,
            eid
        })
    }

    /**
  * 研发新的兵种
  * @param {*} id   研发的兵种类型 
  * @returns 
  */
    public async studying(id: number) {
        return await GameRpc.fetching({
            func: this.control + '.studying',
            a: id
        })
    }

    /**
    * 执行兵种升级动作，然后写入一个兵种升级事件
    * @param {Number} id          兵种类型
    * @param {Number} gType      0:升级攻击 1:升级防御
    * @param {Boolean} action    是执行还是仅仅判断
    */
    public async gradingSoldier(id: number, gType: number, action: boolean) {
        return await GameRpc.fetching({
            func: this.control + '.GradingSoldier',
            a: id,
            gType,
            action
        })
    }

    /**
    * 在当前村落里训练士兵
    * t1       | int   | 第1类士兵数量
    * t2       | int   | 第2类士兵数量
    * t3       | int   | 第3类士兵数量
    * t4       | int   | 第4类士兵数量
    * t5       | int   | 第5类士兵数量
    * t6       | int   | 第6类士兵数量
    * t7       | int   | 第7类士兵数量
    * t8       | int   | 第8类士兵数量
    * t9       | int   | 第9类士兵数量
    * t10      | int   | 第10类士兵数量
    * @returns 
    */
    async train(params) {
        return await GameRpc.fetching({
            func: this.control + '.train',
            ...params
        })
    }

    /**
  * 获取领地待执行事件列表
  * @param eType   指定的事件类型
  * @returns 
  */
    async getVillageEvents(eType) {
        return await GameRpc.fetching({
            func: this.control + '.getVillageEvents',
            eType
        })
    }

    /**
  * 提交商人运输请求
  * @param {*} r1  木头数量
  * @param {*} r2  石头数量
  * @param {*} r3  铁矿数量
  * @param {*} r4  粮食数量
  * @param {*} kid 目标村庄坐标
  * @returns 
  */
    async marketSubmit({ r1, r2, r3, r4, kid }) {
        return await GameRpc.fetching({
            func: this.control + '.marketSubmit',
            r1,
            r2,
            r3,
            r4,
            kid
        })
    }

     /**
     * 获取商人运输事件列表
     * @returns 
     */
     async marketEvents() {
        return await GameRpc.fetching({
            func: this.control + '.marketEvents',
        })
    }

     /**
     * 创建新村庄
     * @param z   新村选址的坐标
     * @returns 
     */
     async createVillage(z) {
        return await GameRpc.fetching({
            func: this.control + '.createVillage',
            z
        })
    }

    /**
     * 放弃绿洲
     * @param {Number} zoneId 指定放弃的绿洲地址
     * @returns 
     */
    async cancelOasis(zoneId) {
        return await GameRpc.fetching({
            func: this.control + '.cancelOasis',
            del:zoneId
        })
    }

     /**
     * 查询当前取消过程中的绿洲列表
     * @returns 
     */
    async canceledOasisList() {
        return await GameRpc.fetching({
            func: this.control + '.canceledOasisList',
          
        })
    }
}

export default new VillageApi()


